package main

import "fmt"

func rotate(nums []int, k int) (result []int) {
	len := len(nums)
	index := k % len
	var temp int
	if k == len || k < 0 {
		return nums
	}
	// 翻转
	for i := 0; i < (len)/2; i++ {
		temp = nums[i]
		nums[i] = nums[len-i-1]
		nums[len-i-1] = temp
	}
	// 前子数组 翻转
	for i := 0; i < index/2; i++ {
		temp = nums[i]
		nums[i] = nums[index-i-1]
		nums[index-i-1] = temp
	}
	// 后子数组 翻转
	for i := index; i < index+(len-index)/2; i++ {
		temp = nums[i]
		nums[i] = nums[len-i+index-1]
		nums[len-i+index-1] = temp
	}
	return nums
}

/**
使用空间复杂度为 O(1) 的 原地 算法。
*/
func main189() {
	//nums := []int{1,2,3,4,5,6,7}
	nums := []int{-1, 2}
	k := 0
	rotate(nums, k)
	// result 5 6 7 1 2 3 4
	fmt.Println(nums)
}
